package secondStage.part6.Lambda表达式.省略模式;

/**
 * @ClassName: [LambdaDemo2]
 * @Description: Lambda表达式的省略模式
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-07]
 * @Version: [v1.0]
 */
/*
1.5 Lambda表达式的省略模式
省略规则:
    ●参数类型可以省略。 但是有多个参数的情况下，不能只省略一个
    ●如果参数有且仅有一个，那么小括号可以省略
    ●如果代码块的语句只有一条,可以省略大括号和分号,甚至是retum.
 */
public class LambdaDemo2 {
    public static void main(String[] args) {
        useAddable((int x, int y) -> {
            return x + y;
        });
        //参数的类型可以省略，
        //但是有多个参数的情况下，不能只省略一个
        useAddable((x, y) -> {
            return x + y;
        });

        useFlyable((String s) -> {
            System.out.println(s);
        });
        useFlyable((s) -> {
            System.out.println(s);
        });
        //如果参数有且仅有一个，那小括号可以省略
        useFlyable(s -> {
            System.out.println(s);
        });
        //如果代码块的语句只有一条，可以省略大括号和分号
        useFlyable(s -> System.out.println(s));
        //如果代码块的语句只有一条，可以省略大括号和分号，如果有return，return也要 省略掉
        useAddable((x, y) -> (x + y));
    }

    private static void useFlyable(Flyable f) {
        f.fly("风和日丽，晴空万里");
    }

    private static void useAddable(Addable a) {
        int sum = a.add(20, 30);
        System.out.println(sum);
    }
}
